//package com.example.novelstory.utill;
//
//import com.alibaba.druid.util.StringUtils;
//import org.springframework.cache.annotation.CachingConfigurerSupport;
//import org.springframework.cache.annotation.EnableCaching;
//import org.springframework.stereotype.Component;
////import redis.clients.jedis.Jedis;
////import redis.clients.jedis.JedisPool;
//
//import javax.annotation.Resource;
//import java.text.DateFormat;
//import java.text.SimpleDateFormat;
//import java.util.Calendar;
//import java.util.Date;
//import redis.clients.jedis.Jedis;
//import redis.clients.jedis.JedisPool;
//
//@Component
//@EnableCaching
//public class OrderIdUtil extends CachingConfigurerSupport {
//
//    @Resource
//    private JedisPool jedisPool;
//
//    //初始值
//    private static final String ORDER_INIT = "0";
//    //订单缓存key
//    private static final String ORDER_KEY = "ORDER_KEY";
//    private static final String USER_KEY = "USER_KEY";
//    //订单ID前缀
//    private static final String ORDER_ID_PREFIX = "Z";
//    private static final String USER_ID_PREFIX = "U";
//    //时间格式化
//    private static final String DATE_FORMAT = "yyyyMMddHHmmss";
//    private static final int MAXLEN = 8;
//
//
//    /**
//     * 通过key获取自增并设定过期时间
//     * @param key
//     * @param date 过期时间
//     * @return
//     */
//    public String generateId(String key, Date date) {
//        Jedis jedis = null;
//        try{
//            //获取Redis实例
//            jedis=jedisPool.getResource();
//            String s=jedis.get(key);//获取key
//            //key如果为空，则赋值为ORDER_INIT初始值，即从0开始
//            if(StringUtils.isEmpty(s)){
//                jedis.set(key,ORDER_INIT);
//            }
//            //对key进行自增操作
//            long orderId=jedis.incr(key);
//            //更新时间，每天清0
//            jedis.expireAt(key,date.getTime());
//            //获取编码长度
//            int len = String.valueOf(orderId).length();
//            StringBuffer sb = new StringBuffer();
//            //如果编码长度少于8，则补0
//            if(len<MAXLEN){
//                for(int i=0;i<(MAXLEN-len);i++){
//                    sb.append("0");
//                }
//                sb.append(orderId);
//            }
//            return sb.toString();
//        }catch (Exception e){
//            e.printStackTrace();
//        }finally {
//            if (jedis != null) {
//                //用完后关闭连接，否则会造成连接耗尽造成阻塞
//                jedis.close();
//            }
//        }
//        return null;
//    }
//
//    /**
//     * 获取唯一订单号
//     * @return
//     */
//    public String genOrderId(){
//        String id = this.generateId(ORDER_KEY,getExpireAtData());
//        String orderId = format(id, ORDER_ID_PREFIX);
//        return orderId;
//    }
//
//    /**
//     * 获取唯一用户编号
//     * @return
//     */
//    public String genUserId(){
//        String id = this.generateId(USER_KEY,getExpireAtData());
//        String userId = format(id, USER_ID_PREFIX);
//        return userId;
//    }
//    /**
//     * 过期时间每天凌晨
//     * @return
//     */
//    public  Date getExpireAtData(){
//        Date date = null;
//        Calendar calendar = Calendar.getInstance();
//        // 时
//        calendar.set(Calendar.HOUR_OF_DAY, 0);
//        // 分
//        calendar.set(Calendar.MINUTE, 0);
//        // 秒
//        calendar.set(Calendar.SECOND, 0);
//        // 毫秒
//        calendar.set(Calendar.MILLISECOND, 0);
//
//        date = calendar.getTime();
//        return date;
//    }
//
//    /**
//     * 格式化时间
//     * @param format 时间格式
//     * @return
//     */
//    public  String getDateFormat(String format){
//        DateFormat df = new SimpleDateFormat(null == format || "".equals(format) ? DATE_FORMAT : format);
//        return df.format(new Date());
//    }
//
//
//    /**
//     * 自定义ID格式
//     * @param id
//     * @param prefix 前缀
//     * @return
//     */
//    private  String format(String id,String prefix){
//        StringBuffer sb = new StringBuffer();
//        if(null != prefix && !"".equals(prefix)){
//            sb.append(prefix);
//        }
//        sb.append(getDateFormat(null));//当前时间戳
//
//        String strId = sb.toString()+id;
//        return strId;
//    }
//
//}
